<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  
  
  <title>Hexo</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <meta name="description" content="第三章 面向对象编程对象和封装 1.类和对象的概念  1，类是对某一事物的描述，是抽象的，概念上的定义。 2，对象是实际存在的该事物的个体，是具体的、现实的。   2.成员变量和局部变量的区别  成员变量：定义在类中，有初始值 局部变量：定义在方法中，无初始值   3.方法的重载：OrverLoad  相同点  在同一个类中 同一个方法名   不同点  参数个数不同，参数顺序不同，参数类型不同">
<meta property="og:type" content="article">
<meta property="og:title" content="Hexo">
<meta property="og:url" content="https://goofyer.gitee.io/notes-on-computer-expertise/2021/12/20/Java/%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%BC%96%E7%A8%8B/index.html">
<meta property="og:site_name" content="Hexo">
<meta property="og:description" content="第三章 面向对象编程对象和封装 1.类和对象的概念  1，类是对某一事物的描述，是抽象的，概念上的定义。 2，对象是实际存在的该事物的个体，是具体的、现实的。   2.成员变量和局部变量的区别  成员变量：定义在类中，有初始值 局部变量：定义在方法中，无初始值   3.方法的重载：OrverLoad  相同点  在同一个类中 同一个方法名   不同点  参数个数不同，参数顺序不同，参数类型不同">
<meta property="og:locale" content="en_US">
<meta property="article:published_time" content="2021-12-19T17:27:25.078Z">
<meta property="article:modified_time" content="2021-12-19T17:27:25.078Z">
<meta property="article:author" content="John Doe">
<meta name="twitter:card" content="summary">
  
    <link rel="alternate" href="/notes-on-computer-expertise/atom.xml" title="Hexo" type="application/atom+xml">
  
  
    <link rel="shortcut icon" href="/notes-on-computer-expertise/favicon.png">
  
  
    
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/typeface-source-code-pro@0.0.71/index.min.css">

  
  
<link rel="stylesheet" href="/notes-on-computer-expertise/css/style.css">

  
    
<link rel="stylesheet" href="/notes-on-computer-expertise/fancybox/jquery.fancybox.min.css">

  
<meta name="generator" content="Hexo 5.4.0"></head>

<body>
  <div id="container">
    <div id="wrap">
      <header id="header">
  <div id="banner"></div>
  <div id="header-outer" class="outer">
    <div id="header-title" class="inner">
      <h1 id="logo-wrap">
        <a href="/notes-on-computer-expertise/" id="logo">Hexo</a>
      </h1>
      
    </div>
    <div id="header-inner" class="inner">
      <nav id="main-nav">
        <a id="main-nav-toggle" class="nav-icon"></a>
        
          <a class="main-nav-link" href="/notes-on-computer-expertise/">Home</a>
        
          <a class="main-nav-link" href="/notes-on-computer-expertise/archives">Archives</a>
        
      </nav>
      <nav id="sub-nav">
        
          <a id="nav-rss-link" class="nav-icon" href="/notes-on-computer-expertise/atom.xml" title="RSS Feed"></a>
        
        <a id="nav-search-btn" class="nav-icon" title="Search"></a>
      </nav>
      <div id="search-form-wrap">
        <form action="//google.com/search" method="get" accept-charset="UTF-8" class="search-form"><input type="search" name="q" class="search-form-input" placeholder="Search"><button type="submit" class="search-form-submit">&#xF002;</button><input type="hidden" name="sitesearch" value="https://goofyer.gitee.io/notes-on-computer-expertise"></form>
      </div>
    </div>
  </div>
</header>

      <div class="outer">
        <section id="main"><article id="post-Java/第三章 面向对象编程" class="h-entry article article-type-post" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
  <div class="article-meta">
    <a href="/notes-on-computer-expertise/2021/12/20/Java/%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%BC%96%E7%A8%8B/" class="article-date">
  <time class="dt-published" datetime="2021-12-19T17:27:25.078Z" itemprop="datePublished">2021-12-20</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
    <div class="e-content article-entry" itemprop="articleBody">
      
        <h2 id="第三章-面向对象编程"><a href="#第三章-面向对象编程" class="headerlink" title="第三章 面向对象编程"></a>第三章 面向对象编程</h2><h3 id="对象和封装"><a href="#对象和封装" class="headerlink" title="对象和封装"></a>对象和封装</h3><ul>
<li><p>1.类和对象的概念</p>
<ul>
<li>1，类是对某一事物的描述，是抽象的，概念上的定义。</li>
<li>2，对象是实际存在的该事物的个体，是具体的、现实的。</li>
</ul>
</li>
<li><p>2.成员变量和局部变量的区别</p>
<ul>
<li>成员变量：定义在类中，有初始值</li>
<li>局部变量：定义在方法中，无初始值</li>
</ul>
</li>
<li><p>3.方法的重载：OrverLoad</p>
<ul>
<li><p>相同点</p>
<ul>
<li>在同一个类中</li>
<li>同一个方法名</li>
</ul>
</li>
<li><p>不同点</p>
<ul>
<li>参数个数不同，参数顺序不同，参数类型不同</li>
</ul>
</li>
</ul>
</li>
<li><p>4.静态变量相当于全局变量</p>
<ul>
<li><p>类变量</p>
<ul>
<li>用static修饰的变量叫静态变量</li>
</ul>
</li>
<li><p>类方法</p>
<ul>
<li>用static修饰的方法叫静态方法</li>
</ul>
</li>
<li><p>静态块</p>
<ul>
<li>修饰代码块</li>
</ul>
</li>
<li><p>静态方法中只能调用静态变量</p>
</li>
<li>非静态方法中不能定义静态变量</li>
</ul>
</li>
<li><p>5.构造方法</p>
<ul>
<li>方法名和类名相同，没有返回值类型</li>
<li><p>构造方法的作用：</p>
<ul>
<li>1，实例化对象</li>
<li>2，给成员变量赋值</li>
</ul>
</li>
<li><p>1.使用new创建对象会自动调用构造方法</p>
<ul>
<li>Person person=new Person();</li>
</ul>
</li>
<li><p>2.3均属于反射机制</p>
<ul>
<li><p>2.使用Class类的newInstance方<em>*</em>调用构造方法</p>
<ul>
<li>Person person=(Person) Class.forName(“com.Person”).newInstance();</li>
</ul>
</li>
<li><p>3.用反射中的constructor类 的newInstance 调用构造方法</p>
<ul>
<li>Constructor  constructor=Person.class.getConstructor ();</li>
<li>Person person=constructor.newInstance();</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><p>案例 银行账户类的设计</p>
<p>/<em><br>技术要点<br>1 定义一个Account类 为类设计一个无参的构造方法和一个有参的构造方法<br>2 在创近岸账户对象，初始化账号、用户、余额和时间<br>存款和取款方法改变金额，并显示记录信息<br>4 在AccountManage类中创建两个对象进行测试
</em>/<br>import java.util.Scanner;<br>import java.util.InputMismatchException;<br>class IllegalDataException extends Exception<br>{</p>
<pre><code>public IllegalDataException()
&#123;
    super(&quot;数据无效&quot;);
&#125;
public IllegalDataException(String s)
&#123;
    super(s);
&#125;
</code></pre><p>}<br>class MyApp<br>{</p>
<pre><code>public double area(float a,float b,float c)throws IllegalDataException
&#123;
    if(a+b&gt;c&amp;&amp;a+c&gt;b&amp;&amp;b+c&gt;a)
    &#123;
        float p=(a+b+c)/2;
        return Math.sqrt(p*(p-a)*(p-b)*(p-c));
    &#125;
    else
    &#123;
        throw new IllegalDataException(&quot;三角形数据错误&quot;);
    &#125;
&#125;
</code></pre><p>}<br>public class Exam3_1银行账号<br>{</p>
<pre><code>public static void main(String args[])
&#123;
    MyApp myapp=new MyApp();
    try
    &#123;
        double f1=myapp.area(3,4,5);
        System.out.println(f1);
        double f2=myapp.area(3,4,1);
        System.out.println(f2);
    &#125;
    catch(IllegalDataException ex)
    &#123;
        System.out.println(ex);
    &#125;
&#125;
</code></pre><p>}</p>
</li>
<li><p>案例 为银行账户类增加功能</p>
<p>/*<br>技术要点<br>1 定义一个Account类 为类设计一个无参的构造方法和一个有参的构造方法<br>2 在创近岸账户对象，初始化账号、用户、余额和时间<br>存款和取款方法改变金额，并显示记录信息<br>4 在AccountManage类中创建两个对象进行测试</p>
<p>V2.00<br>定义类变量numOfAccount和totalBalance，分别用于存储账号总量和银行总余额<br>定义一个私有方法newAccountNo()，用于在内部产生新的账户号，该方法用随机函数，后四位为计数值，不够4位前面补0<br>定义类方法用于访问存储账号总数和银行总余额<br>*/<br>import java.util.Scanner;<br>import java.util.InputMismatchException;<br>import java.util.Date;<br>class Account<br>{</p>
<pre><code>private String ownerName;
private String accountNo;
private double balance;
private Date datetime;
//+++
private static long numOfAccount;
private static double totalBalance;

public Account(String ownerName,String accountNo)
&#123;
    this(ownerName,accountNo,0);
&#125;
public Account(String ownerName,String accountNo,double balance)
&#123;
  this.numOfAccount++;
    this.ownerName=ownerName;
    this.accountNo=accountNo;
    this.balance=balance;
    this.datetime=new Date();
&#125;
//存款
public void disposit(double amount)
&#123;
    balance+=amount;
    String recordStr=String.format(&quot;%1$s %2$tF %2$tT 存款：%3$.2f 账号余额：%4$.2f&quot;,accountNo,neww Date(),amount,balance);
    System.out.println(recordStr);
&#125;
//取款
public void withdraw(double amount)
&#123;
    if(amount&gt;=balance)
    &#123;
        balance-=amount;
        String recordStr=String.format(&quot;%1$s %2$tF %2$tT 取款：%3$.2f 账号余额：%4$.2f&quot;,accountNo,neww Date(),amount,balance);
        System.out.println(recordStr);
    &#125;
    else
    &#123;
        System.out.println(&quot;余额不足&quot;);        
    &#125;
&#125;
public void show()
&#123;
    System.out.println(&quot;姓名：&quot;+ownerName);
    System.out.println(&quot;账号：&quot;+accountNo);
    System.out.println(&quot;当前余额：&quot;+new java.text.DecimalFormal(&quot;.00&quot;).format(balance));
    System.out.println(&quot;账号创建时间：&quot;+new java.text.SimpleDateFormat(&quot;yyyy-MM-dd hh:mm:ss&quot;).format(datetime));
&#125;
public static long getNumOfAccount()
&#123;
    return numOfAccount;
&#125;
public static void setTotalBalance(double totalBalance)
&#123;
    this.totalBalance=totalBalance;
&#125;
public static double getTotalBalance()
&#123;
    return totalBalance;
&#125;
private String newAccountNo()
&#123;
    StringBuilder sb=new StringBuilder();
    for(int i=0;i&lt;12;i++)
    &#123;
        sb.append((int)Math.random()*10);
    &#125;
    sb.append(String.format(&quot;%04d&quot;,numOfAccount));
    return sb.toString();
&#125;
</code></pre><p>}</p>
<p>public class Exam3_2为银行账户类添加功能<br>{</p>
<pre><code>public static void main(String args[])
&#123;
    Account a1=new Account(&quot;10001&quot;,&quot;Tom&quot;,30);
    Account a2=new Account(&quot;10002&quot;,&quot;Mary&quot;);
    a1.desposit(60);
    a1.withdraw(10);
    a2.desposit(10);
    a1.show();
    a2.show();
&#125;
</code></pre><p>}</p>
</li>
</ul>
<h3 id="封装和继承"><a href="#封装和继承" class="headerlink" title="封装和继承"></a>封装和继承</h3><ul>
<li><p>1.封装的概念：</p>
<ul>
<li>将类的某些信息隐藏在类内部，不允许外部程序直接访问，</li>
<li>而是通过该类提供的方法来实现对隐藏信息的操作和访问。</li>
<li><p>封装的好处</p>
<ul>
<li>1，隐藏类的实现细节</li>
<li>2，方便加入控制语句</li>
<li>3，方便修改实现</li>
<li>4，只能通过规定方法访问数据</li>
</ul>
</li>
</ul>
</li>
<li><p>2.继承：extends</p>
<ul>
<li>继承是子类对父类的拓展，延伸</li>
<li><p>继承的特点：</p>
<ul>
<li>1，关键字 extends</li>
<li>2，java类没有多继承，只有单继承，但是可以多重继承</li>
<li>3，不能继承父类的三种情况 private成员、构造方法、子类与父类不在同包，使用默认访问权限的成员</li>
<li>4，java中所有的类的祖先都是Object类</li>
<li><p>5，不同的叫法 </p>
<ul>
<li>父类：基类，超类 </li>
<li>子类：派生类</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><p>3.super: 对父类对象的引用</p>
<ul>
<li><p>super(name)</p>
<ul>
<li>表示调用了父类的的有参构造方法。调用父类的构造方法，必须写在构造方法中的第一行</li>
<li>还可以使用super关键字直接调用父类的方法，如 super.print();(后面的学习还会具体讲)</li>
</ul>
</li>
</ul>
</li>
<li><p>4.final 最终的</p>
<ul>
<li>1，修饰变量、常量， 值不可改变</li>
<li>2，修饰方法， 不能被重写</li>
<li>3，修饰类， 不能被继承</li>
</ul>
</li>
<li><p>5.方法的重写</p>
<ul>
<li><p>重写的特点</p>
<ul>
<li>方法名 参数列表 返回值类型 必须和父类方法一致</li>
<li>访问权限不能比父类的更严格</li>
<li>@Override //注解 规定它下面的方法必须是重写的方法</li>
</ul>
</li>
</ul>
</li>
<li><p>完善银行账户类</p>
<p>/*<br>技术要点<br>1 定义一个Account类 为类设计一个无参的构造方法和一个有参的构造方法<br>2 在创近岸账户对象，初始化账号、用户、余额和时间<br>存款和取款方法改变金额，并显示记录信息<br>4 在AccountManage类中创建两个对象进行测试</p>
<p>V2.00<br>定义类变量numOfAccount和totalBalance，分别用于存储账号总量和银行总余额<br>定义一个私有方法newAccountNo()，用于在内部产生新的账户号，该方法用随机函数，后四位为计数值，不够4位前面补0<br>定义类方法用于访问存储账号总数和银行总余额<br>*/<br>import java.util.Scanner;<br>import java.util.InputMismatchException;<br>import java.util.Date;<br>class Account<br>{</p>
<pre><code>private String ownerName;
private String accountNo;
private double balance;
private Date datetime;
//+++
private static long numOfAccount;
private static double totalBalance;

public Account(String ownerName,String accountNo)
&#123;
    this(ownerName,accountNo,0);
&#125;
public Account(String ownerName,String accountNo,double balance)
&#123;
  this.numOfAccount++;
    this.ownerName=ownerName;
    this.accountNo=accountNo;
    this.balance=balance;
    this.datetime=new Date();
&#125;
//存款
public void disposit(double amount)
&#123;
    balance+=amount;
    String recordStr=String.format(&quot;%1$s %2$tF %2$tT 存款：%3$.2f 账号余额：%4$.2f&quot;,accountNo,neww Date(),amount,balance);
    System.out.println(recordStr);
&#125;
//取款
public void withdraw(double amount)
&#123;
    if(amount&gt;=balance)
    &#123;
        balance-=amount;
        String recordStr=String.format(&quot;%1$s %2$tF %2$tT 取款：%3$.2f 账号余额：%4$.2f&quot;,accountNo,neww Date(),amount,balance);
        System.out.println(recordStr);
    &#125;
    else
    &#123;
        System.out.println(&quot;余额不足&quot;);        
    &#125;
&#125;
public void show()
&#123;
    System.out.println(&quot;姓名：&quot;+ownerName);
    System.out.println(&quot;账号：&quot;+accountNo);
    System.out.println(&quot;当前余额：&quot;+new java.text.DecimalFormal(&quot;.00&quot;).format(balance));
    System.out.println(&quot;账号创建时间：&quot;+new java.text.SimpleDateFormat(&quot;yyyy-MM-dd hh:mm:ss&quot;).format(datetime));
&#125;
public static long getNumOfAccount()
&#123;
    return numOfAccount;
&#125;
public static void setTotalBalance(double totalBalance)
&#123;
    this.totalBalance=totalBalance;
&#125;
public static double getTotalBalance()
&#123;
    return totalBalance;
&#125;
private String newAccountNo()
&#123;
    StringBuilder sb=new StringBuilder();
    for(int i=0;i&lt;12;i++)
    &#123;
        sb.append((int)Math.random()*10);
    &#125;
    sb.append(String.format(&quot;%04d&quot;,numOfAccount));
    return sb.toString();
&#125;
</code></pre><p>}</p>
<p>public class Exam3_3完善银行账户类<br>{</p>
<pre><code>public static void main(String args[])
&#123;
    Account a1=new Account(&quot;10001&quot;,&quot;Tom&quot;,30);
    Account a2=new Account(&quot;10002&quot;,&quot;Mary&quot;);
    a1.desposit(60);
    a1.withdraw(10);
    a2.desposit(10);
    a1.show();
    a2.show();
&#125;
</code></pre><p>}</p>
</li>
</ul>
<h3 id="抽象与接口"><a href="#抽象与接口" class="headerlink" title="抽象与接口"></a>抽象与接口</h3><ul>
<li><p>抽象和多态</p>
<ul>
<li><p>1.抽象（abstract）</p>
<ul>
<li><p>1，意义</p>
<ul>
<li>抽象类是一种不完全规范，规定子类必须具备哪些方法</li>
</ul>
</li>
<li><p>2，特点</p>
<ul>
<li>抽象类中可以有普通属性和普通方法</li>
<li>抽象类中有构造方法，但是不能实例化</li>
<li>抽象类只能被继承</li>
<li>抽象方法只能被子类重写或者子类继续抽象</li>
<li>有抽象方法的类必须是抽象类</li>
<li>抽象类中不一定有抽象方法</li>
</ul>
</li>
</ul>
</li>
<li><p>2.多态</p>
<ul>
<li><p>什么是多态：</p>
<ul>
<li><p>生活中的多态</p>
<ul>
<li>不同类型的打印机打印效果不同 如下图：</li>
</ul>
</li>
<li><p>程序中的多态：</p>
<ul>
<li>一个对象在不同的载体中呈现不同的形态。</li>
<li>同一个引用类型，调用同一个方法，得到不同的结果。</li>
</ul>
</li>
</ul>
</li>
<li><p>1，形参多态的必要条件</p>
<ul>
<li>1，要有继承关系</li>
<li>2，要有方法的重写</li>
<li>3，父类的引用指向子类的对象,</li>
</ul>
</li>
<li><p>2，用途</p>
<ul>
<li>可以减少类中的代码量</li>
<li>可以提高代码的可拓展性和可维护性</li>
</ul>
</li>
<li><p>3.使用父类作为方法形参和使用父类作为返回值类型是使用多态的常用方式。</p>
</li>
</ul>
</li>
<li><p>3.转型</p>
<ul>
<li><p>1，向上转型</p>
<ul>
<li>把子类转换为父类，属于自动类型转换。</li>
</ul>
</li>
<li><p>2，向下转型</p>
<ul>
<li>把父类转换为子类，必须强制类型转换。</li>
</ul>
</li>
<li><p>注意：</p>
<ul>
<li><p>1，向上转型后通过父类引用变量调用的方法是子类覆盖或继承父类的方法，</p>
<ul>
<li>通过父类引用变量无法调用子类特有的方法。</li>
</ul>
</li>
<li><p>2，向下转型后可以访问子类特有的方法，必须转换为父类指向的真实子类类型，</p>
<ul>
<li>否则将出现转换异常（ClassCastException）。</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><p>4.instanceof:</p>
<ul>
<li>运算符用于判断一个对象是否属于一个类或实现一个接口。instanceof:运算符通常和强制类型转换结合使用，先通过instanceof进行类型判断，再进行相应的强制类型转换。</li>
</ul>
</li>
</ul>
</li>
<li><p>接口</p>
<ul>
<li><p>1,接口的定义(interface)：</p>
<ul>
<li>是一种强制性（完全）的规范。</li>
<li>接口不是一个类，</li>
<li>定义一系列的属性（静态常量）和行为（抽象方法）</li>
</ul>
</li>
<li><p>2,接口的特征:</p>
<ul>
<li>1.不能被实例化，接口没有构造方法</li>
<li>2.接口只能被实现implements 或者继续定义为接口</li>
<li>3.接口中的属性默认是 public static fianl 修饰的静态常量</li>
<li>4.接口中的方法默认是 public abstract 修饰的抽象方法</li>
<li><ol>
<li>只能有抽象方法</li>
</ol>
</li>
<li><ol>
<li>接口中的方法必须被子类重写</li>
</ol>
</li>
<li><p>7.一个类实现多个接口用逗号隔开</p>
<ul>
<li>public class Man implements IPerson,Program</li>
</ul>
</li>
<li><p>8.如果一个类有继承又有实现，那么是先继承再实现</p>
</li>
<li>9.接口可以继承多个接口，用逗号隔开！</li>
</ul>
</li>
<li><p>3,类与其他的关系</p>
<ul>
<li><p>继承关系</p>
<ul>
<li>类和类的关系</li>
<li>可以继承多个接口</li>
</ul>
</li>
<li><p>实现关系</p>
<ul>
<li>类和接口的关系</li>
</ul>
</li>
<li><p>接口和接口的关系</p>
<ul>
<li>一个类可以实现多个接口</li>
</ul>
</li>
</ul>
</li>
<li><p>4,类只能继承一个父类</p>
<ul>
<li>但可以实现多个接口，一个类如果实现了一个接口，则必须 实现接口中的全部方法，否则必须将其定义为抽象类。Java通过实现接口达到了多重继承的效果。</li>
</ul>
</li>
<li><p>5，接口表示一种约定，接口表示一种能力，接口体现了约定和实现相分离的原则。</p>
</li>
<li>6，抽象类利于代码复用，接口利于代码维护。</li>
<li><p>7.面向接口编程</p>
<ul>
<li>1，通过面向接口编程，可以降低代码间的耦合性，提高代码的可拓展性和可维护性。</li>
<li>2，面向接口编程意味着：开发系统时，主体构架使用接口，接口构成系统的骨架，这样就可以 通过更换实现接口的类来实现更换系统。</li>
</ul>
</li>
<li><p>8.接口有比抽象类更好的特性：</p>
<ul>
<li>1，可以被多继承</li>
<li>2，设计和实现完全分离</li>
<li>3，更自然的使用多态</li>
<li>4，更容易搭建程序框架</li>
<li>5，更容易更换实现</li>
</ul>
</li>
<li><p>9.接口和抽象类的区别：</p>
<ul>
<li>1，接口不是类，抽象是是一个类</li>
<li>2，接口没有构造方法，抽象类有构造方法 ，都不可以实例化</li>
<li>3，接口只能被实现 ，抽象类只能被继承</li>
<li>4，接口中只能有公共的静态常量和公共的抽象方法，抽象类中可以有普通的属性和方法</li>
<li>5，接口可以多实现（多继承），抽象类只能单继承</li>
</ul>
</li>
</ul>
</li>
<li><p>案例 为绘图程序设计一个图片类</p>
<p>/<em><br>技术要点<br>1 需要的类有线段 矩形 椭圆，任意画通过管线实现<br>利用java的继承构建图形类，先定义hape类，包含图形共有的成员变量x1x2y1y2colorthickfilltype分别表示坐标颜色线条粗细填充方式<br>Line Rect Oval有Shape派生
</em>/<br>import java.awt.Color;<br>public interface IShape<br>{</p>
<pre><code>enum ShapeType&#123;DRAM,LINE,RECT,OVAL&#125;;
enum FillType(FILL,NO_FILL);
void draw(Graphics2D g);
</code></pre><p>}<br>public abstract class Shape implements IShape<br>{</p>
<pre><code>private String ownerName;
private String accountNo;
private double balance;
private Date datetime;
//+++
private static long numOfAccount;
private static double totalBalance;

public Account(String ownerName,String accountNo)
&#123;
    this(ownerName,accountNo,0);
&#125;
public Account(String ownerName,String accountNo,double balance)
&#123;
  this.numOfAccount++;
    this.ownerName=ownerName;
    this.accountNo=accountNo;
    this.balance=balance;
    this.datetime=new Date();
&#125;
//存款
public void disposit(double amount)
&#123;
    balance+=amount;
    String recordStr=String.format(&quot;%1$s %2$tF %2$tT 存款：%3$.2f 账号余额：%4$.2f&quot;,accountNo,neww Date(),amount,balance);
    System.out.println(recordStr);
&#125;
//取款
public void withdraw(double amount)
&#123;
    if(amount&gt;=balance)
    &#123;
        balance-=amount;
        String recordStr=String.format(&quot;%1$s %2$tF %2$tT 取款：%3$.2f 账号余额：%4$.2f&quot;,accountNo,neww Date(),amount,balance);
        System.out.println(recordStr);
    &#125;
    else
    &#123;
        System.out.println(&quot;余额不足&quot;);        
    &#125;
&#125;
public void show()
&#123;
    System.out.println(&quot;姓名：&quot;+ownerName);
    System.out.println(&quot;账号：&quot;+accountNo);
    System.out.println(&quot;当前余额：&quot;+new java.text.DecimalFormal(&quot;.00&quot;).format(balance));
    System.out.println(&quot;账号创建时间：&quot;+new java.text.SimpleDateFormat(&quot;yyyy-MM-dd hh:mm:ss&quot;).format(datetime));
&#125;
public static long getNumOfAccount()
&#123;
    return numOfAccount;
&#125;
public static void setTotalBalance(double totalBalance)
&#123;
    this.totalBalance=totalBalance;
&#125;
public static double getTotalBalance()
&#123;
    return totalBalance;
&#125;
private String newAccountNo()
&#123;
    StringBuilder sb=new StringBuilder();
    for(int i=0;i&lt;12;i++)
    &#123;
        sb.append((int)Math.random()*10);
    &#125;
    sb.append(String.format(&quot;%04d&quot;,numOfAccount));
    return sb.toString();
&#125;
</code></pre><p>}</p>
<p>public class Exam3_4为绘图软件设计一组图形类<br>{</p>
<pre><code>public static void main(String args[])
&#123;
    Account a1=new Account(&quot;10001&quot;,&quot;Tom&quot;,30);
    Account a2=new Account(&quot;10002&quot;,&quot;Mary&quot;);
    a1.desposit(60);
    a1.withdraw(10);
    a2.desposit(10);
    a1.show();
    a2.show();
&#125;
</code></pre><p>}</p>
</li>
</ul>
<h3 id="作业"><a href="#作业" class="headerlink" title="作业"></a>作业</h3><ul>
<li><p>设计一个point类 要求求俩点间距离</p>
<p>public class Point<br>{</p>
<pre><code>public double x,y;
public Point()
&#123;&#125;
public double distance(Point b)
&#123;
    return Math.sqrt((this.x-b.x)*(this.x-b.x)+(this.y-b.y)*(this.y-b.y));
&#125;
</code></pre><p>}</p>
</li>
</ul>

      
    </div>
    <footer class="article-footer">
      <a data-url="https://goofyer.gitee.io/notes-on-computer-expertise/2021/12/20/Java/%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%BC%96%E7%A8%8B/" data-id="cl403sxr3001bf8vu3wp9h04z" data-title="" class="article-share-link">Share</a>
      
      
      
    </footer>
  </div>
  
    
<nav id="article-nav">
  
    <a href="/notes-on-computer-expertise/2021/12/20/Java/%E7%AC%AC%E5%9B%9B%E7%AB%A0%20%E6%95%B0%E7%BB%84/" id="article-nav-newer" class="article-nav-link-wrap">
      <strong class="article-nav-caption">Newer</strong>
      <div class="article-nav-title">
        
          (no title)
        
      </div>
    </a>
  
  
    <a href="/notes-on-computer-expertise/2021/12/20/Java/%E7%AC%AC%E4%BA%8C%E7%AB%A0%20%E6%8E%A7%E5%88%B6%E7%BB%93%E6%9E%84%E4%B8%8E%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86/" id="article-nav-older" class="article-nav-link-wrap">
      <strong class="article-nav-caption">Older</strong>
      <div class="article-nav-title"></div>
    </a>
  
</nav>

  
</article>


</section>
        
          <aside id="sidebar">
  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Categories</h3>
    <div class="widget">
      <ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/C-%E5%B7%A5%E5%85%B7/">C#工具</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/C-%E5%B7%A5%E5%85%B7/">C++工具</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/Mysql/">Mysql</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/blender/">blender</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/linux/">linux</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/manim/">manim</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/spring/">spring</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/vba%E5%9F%BA%E7%A1%80%E6%93%8D%E4%BD%9C/">vba基础操作</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/">创造模式</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/">操作系统</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/">操作系统基础知识</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%BC%80%E5%8F%91/">操作系统开发</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%95%B0%E5%AD%A6/">数学</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/">数据结构</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/">数据结构基础知识</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%A8%A1%E6%9D%BF/">模板</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/">深度学习</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E8%8B%B1%E8%AF%AD/">英语</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E8%99%9A%E5%B9%BB4/">虚幻4</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%84%E6%88%90%E5%8E%9F%E7%90%86/">计算机组成原理</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/">计算机网络</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Tags</h3>
    <div class="widget">
      <ul class="tag-list" itemprop="keywords"><li class="tag-list-item"><a class="tag-list-link" href="/notes-on-computer-expertise/tags/C/" rel="tag">C++</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Tag Cloud</h3>
    <div class="widget tagcloud">
      <a href="/notes-on-computer-expertise/tags/C/" style="font-size: 10px;">C++</a>
    </div>
  </div>

  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Archives</h3>
    <div class="widget">
      <ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2022/05/">May 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2022/03/">March 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2022/02/">February 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2022/01/">January 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2021/12/">December 2021</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Recent Posts</h3>
    <div class="widget">
      <ul>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/31/vue/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6%E9%AA%8C%E8%AF%81%E7%A0%81%E6%97%A0%E6%B3%95%E6%98%BE%E7%A4%BA/">(no title)</a>
          </li>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/26/%E6%95%B0%E6%8D%AE%E5%BA%93/navicat%E5%AE%89%E8%A3%85/">(no title)</a>
          </li>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/25/%E8%99%9A%E5%B9%BB4%E5%BC%95%E6%93%8E%E5%BC%80%E5%8F%91/%E8%99%9A%E5%B9%BB%E5%9B%9B%20mod%E5%88%B6%E4%BD%9C/">(no title)</a>
          </li>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/23/python/python%E6%89%B9%E9%87%8F%E7%94%9F%E6%88%90%E6%95%B0%E6%8D%AE/">(no title)</a>
          </li>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/23/vba%E5%9F%BA%E7%A1%80%E6%93%8D%E4%BD%9C%E7%AC%94%E8%AE%B0/EXCEL%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/">(no title)</a>
          </li>
        
      </ul>
    </div>
  </div>

  
</aside>
        
      </div>
      <footer id="footer">
  
  <div class="outer">
    <div id="footer-info" class="inner">
      
      &copy; 2022 John Doe<br>
      Powered by <a href="https://hexo.io/" target="_blank">Hexo</a>
    </div>
  </div>
</footer>

    </div>
    <nav id="mobile-nav">
  
    <a href="/notes-on-computer-expertise/" class="mobile-nav-link">Home</a>
  
    <a href="/notes-on-computer-expertise/archives" class="mobile-nav-link">Archives</a>
  
</nav>
    


<script src="/notes-on-computer-expertise/js/jquery-3.4.1.min.js"></script>



  
<script src="/notes-on-computer-expertise/fancybox/jquery.fancybox.min.js"></script>




<script src="/notes-on-computer-expertise/js/script.js"></script>





  </div>
<script type="text/x-mathjax-config">
    MathJax.Hub.Config({
        tex2jax: {
            inlineMath: [ ["$","$"], ["\\(","\\)"] ],
            skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code'],
            processEscapes: true
        }
    });
    MathJax.Hub.Queue(function() {
        var all = MathJax.Hub.getAllJax();
        for (var i = 0; i < all.length; ++i)
            all[i].SourceElement().parentNode.className += ' has-jax';
    });
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML"></script>
</body>
</html>